/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package presentacion;
import negocio.ControladorClientes;
import Auxiliares.Contantes;
import java.util.Vector;
import javax.swing.JOptionPane;
import negocio.Cliente;
import Auxiliares.FuncionesComunes;
import Auxiliares.Cache;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.table.DefaultTableModel;
/**
 *
 * @author Esteban
 */
public class PanelGestionUsuarios extends javax.swing.JPanel implements Contantes{

    private static PanelGestionUsuarios _Instancia;
    public PanelPrincipal _PanelPrincipal;
    public ControladorClientes _ControladorClientes;
    public Cache _Cache;
    
     private ActionListener listener = new ActionListener() {  
        public void actionPerformed(ActionEvent evt) {
            buscarUsuarios(txtBuscar.getText());
        }  
    };
    /**
     * Creates new form PanelGestionUsuarios
     */
    private PanelGestionUsuarios() {
        initComponents();
        this.tablaResultadosBusqueda.setVisible(false);
        FuncionesComunes.MostrarOcultarTxt(this, false);
        FuncionesComunes.MostrarOcultarLbl(this, false,jLabel8);
        botonesEstado(false);
        txtBuscar.addActionListener(listener);
    }
    
    public static PanelGestionUsuarios getInstancia(){
        if(_Instancia == null){
            _Instancia = new PanelGestionUsuarios();
        }
        return _Instancia;
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        txtBuscar = new javax.swing.JTextField();
        btnBuscar = new javax.swing.JButton();
        btnLimpiar = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        scrollTabla = new javax.swing.JScrollPane();
        tablaResultadosBusqueda = new javax.swing.JTable();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        txtDireccion = new javax.swing.JTextField();
        txtNombre = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        txtApellidos = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        txtTelefono = new javax.swing.JTextField();
        txtEmail = new javax.swing.JTextField();
        btnElimina = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        btnModificar = new javax.swing.JButton();
        jLabel8 = new javax.swing.JLabel();

        setMaximumSize(new java.awt.Dimension(900, 700));
        setMinimumSize(new java.awt.Dimension(900, 700));
        setLayout(null);

        jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jPanel1.setMaximumSize(new java.awt.Dimension(500, 400));
        jPanel1.setMinimumSize(new java.awt.Dimension(500, 400));
        jPanel1.setLayout(null);

        jLabel1.setFont(new java.awt.Font("Andalus", 0, 18)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(255, 255, 255));
        jLabel1.setText("Introduzca el nombre o parte del mismo del usuario a buscar");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(12, 13, 500, 28);
        jPanel1.add(txtBuscar);
        txtBuscar.setBounds(20, 50, 223, 39);

        btnBuscar.setText("Buscar");
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed(evt);
            }
        });
        jPanel1.add(btnBuscar);
        btnBuscar.setBounds(270, 50, 119, 39);

        btnLimpiar.setText("Limpiar");
        btnLimpiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimpiarActionPerformed(evt);
            }
        });
        jPanel1.add(btnLimpiar);
        btnLimpiar.setBounds(410, 50, 119, 39);

        jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/fondoPanel.jpg"))); // NOI18N
        jLabel2.setText("jLabel2");
        jLabel2.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));
        jLabel2.setName("jLabel2");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(0, 0, 560, 140);

        add(jPanel1);
        jPanel1.setBounds(30, 90, 560, 140);

        scrollTabla.setAutoscrolls(true);

        tablaResultadosBusqueda.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        tablaResultadosBusqueda.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null}
            },
            new String [] {
                "Nombre", "Apellidos", "Telefono", "Correo", "Dirección"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaResultadosBusqueda.setOpaque(false);
        tablaResultadosBusqueda.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaResultadosBusquedaMouseClicked(evt);
            }
        });
        scrollTabla.setViewportView(tablaResultadosBusqueda);

        add(scrollTabla);
        scrollTabla.setBounds(20, 270, 590, 170);

        jLabel3.setFont(new java.awt.Font("Andalus", 1, 24)); // NOI18N
        jLabel3.setForeground(new java.awt.Color(255, 255, 255));
        jLabel3.setText("Nombre    :");
        jLabel3.setName("jLabel3");
        add(jLabel3);
        jLabel3.setBounds(50, 470, 180, 22);

        jLabel4.setFont(new java.awt.Font("Andalus", 1, 24)); // NOI18N
        jLabel4.setForeground(new java.awt.Color(255, 255, 255));
        jLabel4.setText("Dirección :");
        jLabel4.setName("jLabel4");
        add(jLabel4);
        jLabel4.setBounds(50, 550, 180, 22);

        txtDireccion.setName("txtDireccion");
        add(txtDireccion);
        txtDireccion.setBounds(180, 540, 400, 30);

        txtNombre.setName("txtNombre");
        add(txtNombre);
        txtNombre.setBounds(180, 460, 400, 30);

        jLabel7.setFont(new java.awt.Font("Andalus", 1, 24)); // NOI18N
        jLabel7.setForeground(new java.awt.Color(255, 255, 255));
        jLabel7.setText("Apellidos  :");
        jLabel7.setName("jLabel7");
        add(jLabel7);
        jLabel7.setBounds(50, 510, 180, 22);

        txtApellidos.setName("txtApellidos");
        add(txtApellidos);
        txtApellidos.setBounds(180, 500, 400, 30);

        jLabel5.setFont(new java.awt.Font("Andalus", 1, 24)); // NOI18N
        jLabel5.setForeground(new java.awt.Color(255, 255, 255));
        jLabel5.setText("Telefono  :");
        jLabel5.setName("jLabel5");
        add(jLabel5);
        jLabel5.setBounds(50, 590, 130, 22);

        jLabel6.setFont(new java.awt.Font("Andalus", 1, 24)); // NOI18N
        jLabel6.setForeground(new java.awt.Color(255, 255, 255));
        jLabel6.setText("Email        :");
        jLabel6.setName("jLabel7");
        add(jLabel6);
        jLabel6.setBounds(50, 620, 180, 22);

        txtTelefono.setName("txtTelefono");
        add(txtTelefono);
        txtTelefono.setBounds(180, 580, 400, 30);

        txtEmail.setName("txtEmail");
        txtEmail.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtEmailActionPerformed(evt);
            }
        });
        add(txtEmail);
        txtEmail.setBounds(180, 620, 400, 30);

        btnElimina.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        btnElimina.setForeground(new java.awt.Color(204, 0, 0));
        btnElimina.setText("Eliminar");
        btnElimina.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminaActionPerformed(evt);
            }
        });
        add(btnElimina);
        btnElimina.setBounds(660, 200, 210, 50);

        btnCancelar.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        btnCancelar.setForeground(new java.awt.Color(204, 0, 0));
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        add(btnCancelar);
        btnCancelar.setBounds(660, 310, 210, 50);

        btnModificar.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        btnModificar.setForeground(new java.awt.Color(204, 0, 0));
        btnModificar.setText("Modificar");
        btnModificar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnModificarMouseClicked(evt);
            }
        });
        btnModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarActionPerformed(evt);
            }
        });
        add(btnModificar);
        btnModificar.setBounds(660, 90, 210, 50);

        jLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/clientes.png"))); // NOI18N
        jLabel8.setName("jLabel8");
        add(jLabel8);
        jLabel8.setBounds(0, 0, 900, 700);
    }// </editor-fold>//GEN-END:initComponents

    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed
        buscarUsuarios(this.txtBuscar.getText());
    }//GEN-LAST:event_btnBuscarActionPerformed

    private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimpiarActionPerformed
        ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(0);
        //FuncionesComunes.LimpiarTextBox(this, false);
        FuncionesComunes.MostrarOcultarLbl(this, false,jLabel8);
        FuncionesComunes.MostrarOcultarTxt(this, false);
        botonesEstado(false);
    }//GEN-LAST:event_btnLimpiarActionPerformed

    private void txtEmailActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtEmailActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_txtEmailActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(0);
        FuncionesComunes.MostrarOcultarLbl(this, false,jLabel8);
        FuncionesComunes.MostrarOcultarTxt(this, false);
        _PanelPrincipal = PanelPrincipal.getInstancia();
        this.setVisible(false);
        _PanelPrincipal.setVisible(true);
        botonesEstado(false);
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void btnModificarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnModificarMouseClicked
        
    }//GEN-LAST:event_btnModificarMouseClicked

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarActionPerformed
        if(!FuncionesComunes.TxtLimpio(this)){
            modificar();
        }else{
            JOptionPane.showMessageDialog(null, TITULO_CAMPOS_VACIOS, TITULO_CAMPOS_VACIOS, JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_btnModificarActionPerformed

    private void tablaResultadosBusquedaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaResultadosBusquedaMouseClicked

        int row = tablaResultadosBusqueda.getSelectedRow();
        String nombre = tablaResultadosBusqueda.getModel().getValueAt(row, 0).toString();
        
        this.txtNombre.setText(tablaResultadosBusqueda.getModel().getValueAt(row, 0).toString());
        this.txtApellidos.setText(tablaResultadosBusqueda.getModel().getValueAt(row, 1).toString());
        this.txtTelefono.setText(tablaResultadosBusqueda.getModel().getValueAt(row, 2).toString());
        this.txtEmail.setText(tablaResultadosBusqueda.getModel().getValueAt(row, 3).toString());
        this.txtDireccion.setText(tablaResultadosBusqueda.getModel().getValueAt(row, 4).toString());
        
        tablaResultadosBusqueda.setVisible(false);
        //metemos el telefono en cachÃ© pasa saber cual es el numero que tenemos que cambiar.
        _Cache = Cache.getInstancia();
        _Cache.setTelefonoClienteGestion(this.txtTelefono.getText());
        
        FuncionesComunes.MostrarOcultarTxt(this, true);
        FuncionesComunes.MostrarOcultarLbl(this, true);
        
        botonesEstado(true);
    }//GEN-LAST:event_tablaResultadosBusquedaMouseClicked

    private void btnEliminaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminaActionPerformed
       eliminar();
    }//GEN-LAST:event_btnEliminaActionPerformed

    
    private void buscarUsuarios(String busqueda){
        Vector<Cliente> clientes = new Vector();
            
        if(!busqueda.isEmpty()){
            _ControladorClientes = ControladorClientes.getInstancia();
            Vector<Cliente> resp = _ControladorClientes.buscarClientesXNombre(busqueda);
            cargarTabla(resp);
        }else{
            JOptionPane.showMessageDialog(null, MENSAJE_VACIO, TITULO_VACIO, JOptionPane.ERROR_MESSAGE);
        }
         
    }
    
    private void cargarTabla(Vector<Cliente> resp){
      
        if(resp.size() > 0){
            this.tablaResultadosBusqueda.setVisible(true);
            //primero tenemos que decirle a la tabla, la cual se carga con un model, de cuantas filas será
            ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(resp.size());
            
            
            //cargamos la tabla
            for(int cont = 0; cont < resp.size(); cont++){
                //setValueAt(usuarios.elementAt(cont).getCedula().toString(), cont, 0);
                Cliente cliente = resp.elementAt(cont);
                tablaResultadosBusqueda.setValueAt(cliente.getNombre(), cont, 0);
                tablaResultadosBusqueda.setValueAt(cliente.getApellidos(), cont, 1);
                tablaResultadosBusqueda.setValueAt(cliente.getTelefono(), cont, 2);
                tablaResultadosBusqueda.setValueAt(cliente.getCorreo(), cont, 3);
                tablaResultadosBusqueda.setValueAt(cliente.getDireccion(), cont, 4);
            }
        }else{
          JOptionPane.showMessageDialog(null, MENSAJE_NOENCONTRO_NOMBRE, TITULO_NOENCONTRO, JOptionPane.ERROR_MESSAGE);
        }
            
    }
              
    private void modificar(){
        Cliente cliente = new Cliente();
        
        cliente.setNombre(this.txtNombre.getText());
        cliente.setApellidos(this.txtApellidos.getText());
        cliente.setCorreo(this.txtEmail.getText());
        cliente.setDireccion(this.txtDireccion.getText());
        cliente.setTelefono(this.txtTelefono.getText());
        
        //sacamos el telefono original de la cache para guia de modificacion
        _Cache = Cache.getInstancia();
        
        _ControladorClientes = ControladorClientes.getInstancia();
        int result = _ControladorClientes.modificarCliente(cliente,_Cache.getTelefonoClienteGestion());
        
        switch(result){
            case 1:JOptionPane.showMessageDialog(null, MENSAJE_USUARIO_MODIFICAR_REPETIDO, "MODIFICAR CLIENTE", JOptionPane.ERROR_MESSAGE);
                break;
            case 2: JOptionPane.showMessageDialog(null, MENSAJE_USUARIO_MODIFICAR_ERROR, "MODIFICAR CLIENTE", JOptionPane.ERROR_MESSAGE);
                break;
            case 3:{ JOptionPane.showMessageDialog(null, MENSAJE_USUARIO_MODIFICAR_EXITO, "MODIFICAR CLIENTE", JOptionPane.INFORMATION_MESSAGE);
                ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(0);
                FuncionesComunes.MostrarOcultarLbl(this, false,jLabel8);
                FuncionesComunes.MostrarOcultarTxt(this, false);
                botonesEstado(false);
                break;
            }
        }
    }
    
    private void eliminar(){
        //sacamos el telefono original de la cache para guia de modificacion
        _Cache = Cache.getInstancia();
       
        _ControladorClientes = ControladorClientes.getInstancia();
        boolean result = _ControladorClientes.eliminarCliente(_Cache.getTelefonoClienteGestion());
        
        if(result){
            JOptionPane.showMessageDialog(null, MENSAJE_USUARIO_ELIMINAR_EXITO, "ELIMINAR CLIENTE", JOptionPane.INFORMATION_MESSAGE);
            ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(0);
            FuncionesComunes.MostrarOcultarLbl(this, false,jLabel8);
            FuncionesComunes.MostrarOcultarTxt(this, false);
            botonesEstado(false);
        }else{
            JOptionPane.showMessageDialog(null, MENSAJE_USUARIO_ELIMINAR_ERROR, "ELIMINAR CLIENTE", JOptionPane.ERROR_MESSAGE);
        }
   
    }
    
    private void botonesEstado(boolean est){
        this.btnElimina.setEnabled(est);
        this.btnModificar.setEnabled(est);
    }
    

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnElimina;
    private javax.swing.JButton btnLimpiar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane scrollTabla;
    private javax.swing.JTable tablaResultadosBusqueda;
    private javax.swing.JTextField txtApellidos;
    private javax.swing.JTextField txtBuscar;
    private javax.swing.JTextField txtDireccion;
    private javax.swing.JTextField txtEmail;
    private javax.swing.JTextField txtNombre;
    private javax.swing.JTextField txtTelefono;
    // End of variables declaration//GEN-END:variables
}
